#ifndef __UTILS_PRINT_H__
#define __UTILS_PRINT_H__

#include <stdint.h>

#ifndef UTILS_PRINT_MASK_DEFAULT
#define UTILS_PRINT_MASK_DEFAULT            ((uint32_t)0xFFFFFFFF)
#endif

// User's utils print configuration
// 0 ~ 32
enum {
	UPM_NORMAL = 0,
	UPM_NWK,
	UPM_KEY,
	UPM_LED,
	UPM_BATTERY,
	UPM_EXT_BIND,
	UPM_EXT_SCENE,
};


// base
#if 0
#define utils_print_base(format, ARGS...) \
    do { printf("[%d]"format, __LINE__, ##ARGS); fflush(NULL); } while(0)
#else
#define utils_print_base(format, ARGS...) \
    do { emberAfDebugPrint("[%d]"format, __LINE__, ##ARGS); } while(0)
#endif

// level > base
#define utils_print_level(level, format, ARGS...) \
    do { if(level < 32 && ((1 << level) & UTILS_PRINT_MASK_DEFAULT)) \
        { utils_print_base("[%d]"format, level, ##ARGS); } } while(0)

// type > level > base
#define utils_print_normal(level, format, ARGS...) \
    do { utils_print_level(level, format, ##ARGS); } while(0)

#define utils_print_error(level, format, ARGS...) \
    do { utils_print_level(level, "\e[31;1m"format"\e[0m", ##ARGS); } while(0)

#define utils_print_warn(level, format, ARGS...) \
    do { utils_print_level(level, "\e[33;1m"format"\e[0m", ##ARGS); } while(0)

#define utils_print_info(level, format, ARGS...) \
    do { utils_print_level(level, "\e[34;1m"format"\e[0m", ##ARGS); } while(0)

#define utils_print_ok(level, format, ARGS...) \
    do { utils_print_level(level, "\e[32;1m"format"\e[0m", ##ARGS); } while(0)

#define UTILS_PRINT(level, format, ARGS...) \
    do { utils_print_level(level, format, ##ARGS); } while(0)
 
#endif // __UTILS_PRINT_H__
